JSON en .NET Core
Home

JSON en .NET Core

JSON en .NET Core

JSON staat voor JavaScript Object Notation: het is een op JavaScript gebaseerde manier om gegevens weer te geven en op te slaan. Douglas Crockford, de bedenker ervan, vond dat XML te ingewikkeld was en stelde een eenvoudiger manier om data uit te wisselen voor dat dichter stond bij de manier waarop objecten in JavaScript werden voorgesteld.

De gegevens worden in JSON opgeslagen als data-paren, te weten variabele:waarde. De naam en de waarde binnen een data-paar worden gescheiden door een dubbele punt.
Dit alles wordt achter elkaar in een string gezet, gescheiden door komma's.

Je kunt de JSON notatie gebruiken om:

Doestelling

Na deze les kan je JSON manipuleren in C#.

Als voorbeeld nemen we de Postcodes. We lezen de postcodes in uit het csv bestand in een array en we serialiseren vervolgens de array als JSON. Tenslotte lezen we het JSON bestand in en zetten de JSON om naar een List.

Bronnen

  1. Suresh Dasari, Convert List Object to JSON String in C#, VB.NET, Feb 2, 2017
  2. Newtonsoft.Json

Newtonsoft.Json installeren

  1. Ik ga ervan uit dat je op je lokale computer een werkmap voor de module hebt gemaakt (in de trant van Programmeren5-15227 of Programmeren3-15268 of gewoon Programmeren3). Hangt ervan af in welke module dit toegepast wordt.
  2. Werkmap op je lokale computer
    Werkmap op je lokale computer
  3. Ik ga er ook vanuit dat je .NET Core reeds geactiveerd hebt. Indien niet ga je eerst naar Programmeren in Visual Studio.
  4. Daarnaast heb je reeds een project learning aangemaakt, indien niet ga je naar Oefening OO code schrijven. Daar zie je hoe je een learning project creëert.
  5. Het Newtonsoft.Json pakket installeren. Hoe je dat doet vind je op de Newtonsoft.Json pagina. We gaan de JSON serializer installeren met behulp van NuGet.
    1. De NuGet Package Manager Console openen:
      Open Package Manager Console
      Open Package Manager Console
    2. De serializer installeren met de instructie Install-Package Newtonsoft.Json -Version 10.0.3:
      Visual Studio System.Xml.XmlSerializer package toegevoegd
      Visual Studio System.Xml.XmlSerializer package toegevoegd
  6. Voeg de methode SerializeCsvToJson toe aan de klasse TryOut in de namespace DotNetCore.Learning in het klassenbestand met de naam Learning.cs.om een bestand te genereren met de postcodes in JSON formaat:
    public static void SerializeCsvToJson()
    {
        Postcode postcode = new Postcode();
        TextWriter writer = new StreamWriter(@"Data/Postcode.json");
        //De serializer werkt niet voor een generieke lijst en ook niet voor ArrayList
        List<Postcode> postcodeList = GetPostcodeList();
        // static method SerilizeObject van Newtonsoft.Json
        string postcodeString = Newtonsoft.Json.JsonConvert.SerializeObject(postcodeList);
        writer.WriteLine(postcodeString);
        writer.Close();
    }
    
  7. We maken nu een presentatie methode om de postcodes in de console te tonen. Voeg de volgende methode toe aan de klasse TryOut in de namespace DotNetCore.Learning in het bestand met de naam Learning.cs (dat is dezelfde methode als voor de postcodes die we uit een XML bestand lezen (XML en .NET Core).
    public static void ListPostcodes(List<Postcode> list)
    {
        foreach (Postcode postcode in list)
        {
            // One of the most versatile and useful additions to the C# language in version 6
            // is the null conditional operator ?.Post           
            Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}",
                postcode?.Code,
                postcode?.Plaats,
                postcode?.Provincie,
                postcode?.Localite,
                postcode?.Province);
        }
    }
  8. En nu nog een methode om de postcodes om te zetten van JSON formaat naar een List met Postcode objecten. Voeg de methode GetPostcodeListFromJson toe aan de klasse TryOut in de namespace DotNetCore.Learning in het klassenbestand met de naam Learning.cs:
    public static List<Postcode> GetPostcodeListFromJson()
    {
        Helpers.Tekstbestand bestand = new Helpers.Tekstbestand();
        bestand.FileName = @"Data/Postcode.json";
        bestand.Lees();
        List<Postcode> list = JsonConvert.DeserializeObject<List<Postcode>>(bestand.Text);
        return list;
    }
  9. Probeer de methoden uit in de Main functie van Program.cs:
    using System;
    
    namespace DotNetCore.Learning
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                TryOut.ListPostcodes(TryOut.GetPostcodeListFromJson());
                Console.ReadKey();
            }
        }
    }
  10. En dat is het resultaat:
    Visual Studio JSON Deserializer Test Result
    Visual Studio JSON Deserializer Test Result
  11. Wijzigingen opslaan in de repo op Bitbucke
    1. Er rest ons alleen nog de wijzigingen te sturen naar onze repo op Cloud9. Let erop dat ik in de voorbeelden een andere naam kan gebruiken. Ik gebruik dit lesmateriaal immers in meerdere modules.

      Daarvoor voeren we de volgende stappen uit:

      1. ga naar het commando venster of naar PowerShell;
      2. ga naar de de map waar je project staat, we pushen immers het hele project en niet alleen de dotnetcore map (de naam van de map hangt af van de module die je aan het volgen bent):
        cd "C:\Users\jefin\OneDrive\school 2017-2018\Programmeren3-15268"
      3. Voeg de volgende mappen en bestand toe in het .gitignore bestand:
        dotnetcore/hwapp/bin/
        dotnetcore/hwapp/obj/
        dotnetcore/adodotnet/adodotnet/obj/
        dotnetcore/adodotnet/adodotnet/bin/Debug/
        dotnetcore/adodotnet/adodotnet/obj/Debug/
        dotnetcore/adodotnet/adodotnet.sln
        dotnetcore/adodotnet/adodotnet/.vs/
        dotnetcore/.vs/
        dotnetcore/learning/bin/
        dotnetcore/learning/obj/
        dotnetcore/*.sln
        
    2. check de gewijzigde bestanden:
      git status
    3. we merken dat er VS nieuwe bestanden heeft gemaakt die we niet in de repo willen, dus wijzigen we het .gitignore bestand;
    4. met git rm -rf --cached . activeren we het nieuwe .gitignore bestand (VS verzameld automatisch bestanden)
    5. opnieuw git status
    6. verzamel de gewijzigde bestanden op de verzamelplaats:
      git add --all
    7. check welke bestanden verzameld zijn:
      git status
    8. leg ze neer en voeg er commentaar aan toe:
      git commit -m "Newtonsoft.Json toegevoegd en uitgetest."
    9. verifiëer als je al een alias voor Bitbucket url hebt toegevoegd:
      git remote -v
    10. Indien nodig voeg je een alias toe voor de Bitbucket url:
      git remote add origin https://JefInghelbrecht@bitbucket.org/JefInghelbrecht/programmeren-3.git
    11. verstuur de neergelegde wijzigingen naar BitBucket:
      git push -u origin master
    12. Als je repo's niet meer gesynchroniseerd zijn omdat dit de eerste keer is dag je dit doet, kan je de push forceren met de -f flag:
      git push -f origin master.
    13. check op Bitbucket als de repo bijgewerkt is

JI
2020-10-23 08:47:28